/* -*-c++-*- */
/* osgGIS - GIS Library for OpenSceneGraph
 * Copyright 2007-2008 Glenn Waldron and Pelican Ventures, Inc.
 * http://osggis.org
 *
 * osgGIS is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */

#ifndef _OSGGISPROJECTS_BUILDER_H_
#define _OSGGISPROJECTS_BUILDER_H_ 1

#include <osgGISProjects/Common>
#include <osgGISProjects/Project>
#include <osgGISProjects/MapLayer>
#include <osgGIS/Session>
#include <osgGIS/ResourcePackager>

using namespace osgGIS;

namespace osgGISProjects
{
    class OSGGISPROJECTS_EXPORT Builder
    {
    public:
        Builder( Project* project );
        
        /** 
         * Sets the maximum number of parallel threads to use for
         * building each target. The default value is equal to the
         * number of LOGICAL processors detected in the system.
         */
        void setNumThreads( int num_threads );

        bool build();

        bool build( const std::string& target_name );

    protected:
        bool build( BuildTarget* target );
        bool build( BuildLayer* layer );
        bool build( Source* source, Session* session );

    private:
        osg::ref_ptr<Project> project;
        int num_threads;
        
    private:
        std::string resolveURI( const std::string& input );

        bool addSlicesToMapLayer( 
            BuildLayerSliceList& slices, 
            const Properties& env_props,
            MapLayer* map_layer,
            ResourcePackager* default_packager, 
            unsigned int lod, 
            Session* session,
            Source* source );
    };
}

#endif // _OSGGISPROJECTS_BUILDER_H_

